#include "ring_queue.hpp"
#include <unistd.h>
int cnt=1;
mutex locker;
void* productor(void* arg)
{
    ring_queue<int>* rq=(ring_queue<int>*)arg;
    while(true)
    {
        // locker.lock();
        // cnt++;
        // locker.unlock();

         int data = 0;
        {
            locker.lock();
            data = cnt++;
            locker.unlock();
        }
        printf("生产了一个数据%d\n",data);
        rq->e_queue(data);
    }
    return nullptr;
}
void* consumer(void* arg)
{
    ring_queue<int>* rq=(ring_queue<int>*)arg;
    while(true)
    {
        int data=0;
        rq->pop(data);
        printf("拿到了一个数据%d\n",data);
        sleep(2);
    }
    return nullptr;
}
int main()
{
    ring_queue<int> rq;
    std::vector<pthread_t> p(3);
    std::vector<pthread_t> c(1);
    for(auto& x:p)
    {
        pthread_create(&x,nullptr,productor,&rq);
    }
    for(auto&x:c)
    {
        pthread_create(&x,nullptr,consumer,&rq);
    }
    for(auto& x:p)
    {
        pthread_join(x,nullptr);
    }
    for(auto&x:c)
    {
        pthread_join(x,nullptr);
    }
    return 0;
}